﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace StuertzDatenbank
{
    public partial class HerstellerBearbeitenGui : Form
    {
        private Benutzer benutzer;
        private DBF dbf;
        private Sprachfile sprachfile;
        private List<Country> aktuellelaenderliste;
        private Hersteller aktuellerhersteller;
        private List<Geschlecht> geslechterliste;
        private List<Sprache> spracheliste;
        private List<Country> laenderliste;
        public HerstellerBearbeitenGui(Benutzer benutzer, Hersteller AktuellerHersteller)
        {
            this.benutzer = benutzer;
            dbf = new DBF();
            sprachfile = new Sprachfile();
            aktuellerhersteller = AktuellerHersteller;
            geslechterliste = dbf.alleGeschlechterAusgeben();
            spracheliste = dbf.alleSprachenAusgeben();
            laenderliste = new List<Country>();
            ansprechpartnerliste = new List<Ansprechpartner>();
            

            InitializeComponent();
            fillcountryarray();
            rechteverwaltung();
            InitializeComponentChange();
            ComponendChange();
            benutzercontrolle();
            this.Refresh();
        }

        private void benutzercontrolle()
        {
            if (benutzer.getRolle().getRechte().Herstellerbearbeiten)
            {
                this.Speichern.Visible = true;
            }
            else
            {
                this.Speichern.Visible = false;
            }
            this.Loeschenbutton.Visible = benutzer.getRolle().getRechte().Herstellerloeschen;

        }

        private void InitializeComponentChange()
        {
            
           

            //lade Laenderlste
            laenderliste = dbf.alleLaenderAusgeben();
            for (int i = 0; i < laenderliste.Count; i++)
            {
                countrycombobox.Items.Add(laenderliste[i].getCountry());
            }
           
            //Lade Geschlechter
            for (int i = 0; i < geslechterliste.Count; i++)
            {
                Geschlechtbox.Items.Add(geslechterliste[i].getGeschlecht());
            }
            //LadeSprachen
            for (int i = 0; i < spracheliste.Count; i++)
            {
                SprachecheckedListBox.Items.Add(spracheliste[i].getSprache());
            }
           
            //LadeSerie
           
            List<Serie> serien= new List<Serie>();
            serien = dbf.getHerstellerserien(aktuellerhersteller);
            SeriedataGridView.Rows.Clear();

            for (int i = 0; i < serien.Count; i++)
            {
                SeriedataGridView.Rows.Add(serien[i].getSerie(), serien[i].getID());
            }

            //Ladeprofile

            List<Profil> profilliste = new List<Profil>();
            profilliste=dbf.getProfileByHersteller(this.aktuellerhersteller);
            aktuellerhersteller.setProfile(profilliste);
            ProfileProfiletapdataGridView.Rows.Clear();
            for (int i = 0; i < profilliste.Count; i++)
            {
                ProfileProfiletapdataGridView.Rows.Add(profilliste[i].getID(), profilliste[i].getBezeichnung());
            }
             

            this.SeriebezeichnungSeriDatagridvieSerieTap.HeaderText = sprachfile.Bezeichnung;
            this.ProfilbezeichnungProfilDatagridview.HeaderText = sprachfile.Bezeichnung;
            this.Loeschenbutton.Text = sprachfile.Loeschen;
            this.Start.Text = sprachfile.Start;
            this.Speichern.Text = sprachfile.Speichern;
            
         }
        private void ComponendChange()
        {
            ansprechpartnerliste = aktuellerhersteller.getAnsprechpartner();
            AnsprechpartnerBox.Items.Clear();
            AnsprechpartnerBox.Items.Add(sprachfile.NeuerAnsprechpartner);

            Clearansprechpartner();

            this.HerstellernameTextbox.Text = aktuellerhersteller.getName();
            this.HerstellernummerTextoc.Text = aktuellerhersteller.getID().ToString();
            this.Adressline1Textbox.Text = aktuellerhersteller.getAdressline1();
            this.Adressline2Textbox.Text = aktuellerhersteller.getAdressline2();
            this.CityTextbox.Text = aktuellerhersteller.getCity();
            this.PLZtextbox.Text = aktuellerhersteller.getPostcode();
            this.stateTextbox.Text = aktuellerhersteller.getState();

            for (int i = 0; i < aktuellerhersteller.getAnsprechpartner().Count; i++)
            {
                this.AnsprechpartnerBox.Items.Add(aktuellerhersteller.getAnsprechpartner()[i].getNachname());
            }

            countrycombobox.SelectedItem = aktuellerhersteller.getCountry().getCountry();
        }          

        private void rechteverwaltung()
        {
            
                this.Speichern.Visible = benutzer.getRolle().getRechte().Herstellerbearbeiten;
                this.Loeschenbutton.Visible = benutzer.getRolle().getRechte().Herstellerloeschen;
                this.AnsprechpartnerloeschenButton.Visible = benutzer.getRolle().getRechte().Herstellerbearbeiten;
                this.Ansprechpartnerspeichernbutton.Visible = benutzer.getRolle().getRechte().Herstellerbearbeiten;
                this.NeuerAnsprechpartnerButton.Visible = benutzer.getRolle().getRechte().Herstellerbearbeiten;
                       
        }

        private void fillcountryarray()
        {
            aktuellelaenderliste = this.dbf.alleLaenderAusgeben();
            for (int i = 0; i < aktuellelaenderliste.Count; i++)
            {
                this.countrycombobox.Items.Add(aktuellelaenderliste[i].getCountry());
            }
            this.Refresh();


        }

    

        private void Speichern_Click(object sender, EventArgs e)
        {
            
            aktuellerhersteller.setID(int.Parse(this.HerstellernummerTextoc.Text));
            aktuellerhersteller.setName(this.HerstellernameTextbox.Text);
            aktuellerhersteller.setAdressline1(this.Adressline1Textbox.Text);
            this.aktuellerhersteller.setAdressline2(this.Adressline2Textbox.Text);
            aktuellerhersteller.setCity(this.CityTextbox.Text);
            this.aktuellerhersteller.setPostcode(this.PLZtextbox.Text);
            this.aktuellerhersteller.setState(this.stateTextbox.Text);
            this.aktuellerhersteller.setCountry(aktuellelaenderliste[this.countrycombobox.SelectedIndex]);

                    
            dbf.herstellerBearbeiten(aktuellerhersteller);
            ComponendChange();

            this.Visible = false;
            HerstellersucheGui gui = new HerstellersucheGui(benutzer);
            this.Dispose();
            gui.ShowDialog();
        }

        private void Start_Click(object sender, EventArgs e)
        {
            this.Visible = false;
            startgui gui = new startgui(benutzer);
            this.Dispose();
            gui.ShowDialog();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Visible = false;
            HerstellersucheGui gui = new HerstellersucheGui(benutzer);
            this.Dispose();
            gui.ShowDialog();
        }

        private void AnsprechpartnerBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                ansprechpartneranzeigen(ansprechpartnerliste[this.AnsprechpartnerBox.SelectedIndex - 1]);
            }
            catch (Exception)
            {
                
                
            } 
        }

        private void NeuerAnsprechpartnerButton_Click(object sender, EventArgs e)
        {

            NeuerAnsprechpartner();
        }

        private void Ansprechpartnerspeichernbutton_Click(object sender, EventArgs e)
        {
            Ansprechpartner aktuelleransprechpartner = new Ansprechpartner(-1);
            if (this.AnsprechpartnerBox.SelectedIndex!=0)
            {
                
                aktuelleransprechpartner.setID(ansprechpartnerliste[AnsprechpartnerBox.SelectedIndex -1].getID());
                aktuellerhersteller.getAnsprechpartner().RemoveAt(AnsprechpartnerBox.SelectedIndex - 1);
            }
            

            aktuelleransprechpartner.setGeschlecht(geslechterliste[this.Geschlechtbox.SelectedIndex]);
            aktuelleransprechpartner.setNachname(this.Namebox.Text);
            aktuelleransprechpartner.setVorname(this.Vornamebox.Text);
            aktuelleransprechpartner.setTitel(this.Titelbox.Text);
            aktuelleransprechpartner.setFachbereich(this.Fachbereichbox.Text);
            aktuelleransprechpartner.setTelefon1(this.Telefon1box.Text);
            aktuelleransprechpartner.setTelefon2(this.Telefon2box.Text);
            aktuelleransprechpartner.setEmail(this.Emailbox.Text);
            aktuelleransprechpartner.setFax(this.Faxbox.Text);
            aktuelleransprechpartner.setKommentar(this.Kommentarbox.Text);

            List<Sprache> aktuellesprachliste = new List<Sprache>();
            for (int i = 0; i < SprachecheckedListBox.Items.Count; i++)
            {
                if (this.SprachecheckedListBox.GetItemChecked(i))
                {

                    aktuellesprachliste.Add(this.spracheliste[i]);

                }
            }
            aktuelleransprechpartner.setSprache(aktuellesprachliste);
            
            
            
            aktuellerhersteller.addAnsprechpartner(aktuelleransprechpartner);
            ComponendChange();
           
        }

        private void AnsprechpartnerloeschenButton_Click(object sender, EventArgs e)
        {
            dbf.AnsprechpartnerLoeschen(ansprechpartnerliste[AnsprechpartnerBox.SelectedIndex - 1]);
            aktuellerhersteller.getAnsprechpartner().RemoveAt(AnsprechpartnerBox.SelectedIndex-1);
            ComponendChange();
        }
        private void ansprechpartneranzeigen(Ansprechpartner ansprechpartner)
        {
            this.Clearansprechpartner();
            for (int i = 0; i < geslechterliste.Count; i++)
            {
                if (Geschlechtbox.Items[i].ToString().Equals(ansprechpartner.getGeschlecht().getGeschlecht()))
                {
                    this.Geschlechtbox.SelectedIndex = i;
                }
            }
           
            this.Namebox.Text = ansprechpartner.getNachname();
            this.Vornamebox.Text = ansprechpartner.getVorname();
            this.Titelbox.Text = ansprechpartner.getTitel();
            this.Fachbereichbox.Text = ansprechpartner.getFachbereich();
            this.Telefon1box.Text = ansprechpartner.getTelefon1();
            this.Telefon2box.Text = ansprechpartner.getTelefon2();
            this.Emailbox.Text = ansprechpartner.getEmail();
            this.Faxbox.Text = ansprechpartner.getFax();
            this.Kommentarbox.Text = ansprechpartner.getKommentar();

            for (int j = 0; j < SprachecheckedListBox.Items.Count; j++)
            {
                for (int i = 0; i < ansprechpartner.getSprache().Count; i++)
                {
                
                    if (SprachecheckedListBox.Items[j].Equals(ansprechpartner.getSprache()[i].getSprache()))
                    {
                        this.SprachecheckedListBox.SetItemChecked(j, true);
                        
                    }
                    
                }
            }
           

            this.Refresh();
        }

        private void NeuerAnsprechpartner()
        {
            AnsprechpartnerBox.SelectedIndex = 0;
            Geschlechtbox.ResetText();
            this.Namebox.Text = "";
            this.Vornamebox.Text = "";
            this.Titelbox.Text = "";
            this.Fachbereichbox.Text = "";
            this.Telefon1box.Text = "";
            this.Telefon2box.Text = "";
            this.Emailbox.Text = "";
            this.Faxbox.Text = "";
            this.Kommentarbox.Text = "";
            for (int i = 0; i < SprachecheckedListBox.Items.Count; i++)
            {
                this.SprachecheckedListBox.SetItemChecked(i, false);


            }
        }
        private void Clearansprechpartner()
        {
            AnsprechpartnerBox.ResetText();
            Geschlechtbox.ResetText();
            this.Namebox.Text = "";
            this.Vornamebox.Text = "";
            this.Titelbox.Text = "";
            this.Fachbereichbox.Text = "";
            this.Telefon1box.Text = "";
            this.Telefon2box.Text = "";
            this.Emailbox.Text = "";
            this.Faxbox.Text = "";
            this.Kommentarbox.Text = "";
            for (int i = 0; i < SprachecheckedListBox.Items.Count; i++)
            {
                this.SprachecheckedListBox.SetItemChecked(i, false);


            }
        }



        public List<Ansprechpartner> ansprechpartnerliste { get; set; }

        private void Loeschenbutton_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show(sprachfile.ObjektLoeschen, sprachfile.ObjektLoeschenKopfzeile, MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                dbf.HerstellerLoeschen(aktuellerhersteller);
                this.Visible = false;
                HerstellersucheGui gui = new HerstellersucheGui(benutzer);
                this.Dispose();
                gui.ShowDialog();
            }


            
        }

        private void ProfileProfiletapdataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }
        private void ProfileProfiletapdataGridView_RowHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (ProfileProfiletapdataGridView.Rows[e.RowIndex]!=null)
            {
                this.Visible=false;
                Profilgui gui = new Profilgui(this.benutzer, dbf.ProfilAusgeben(int.Parse(ProfileProfiletapdataGridView.Rows[e.RowIndex].Cells[0].Value.ToString())));
                this.Dispose();
                gui.ShowDialog();
                
                
            
            }

        }

    }
}
